﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace BatchIdentity
{
    class Program
    {
        static System.Random rnd;

        static void Main(string[] args)
        {
            for (int i = 1; i <= 100; i++)
            {
                Thread.Sleep(18);

                var code = GenPinCode();
                var sexF = int.Parse(code.Substring(16, 1)) % 2 == 0;
                var dist = _districtName[_district.ToList().IndexOf(code.Substring(0, 6))];

                var name = GenName(sexF);

                Console.WriteLine("{0,3}. {1}[{2}] {3} {4}", i, name.Length == 2 ? (name + "    ") : (name.Length == 3 ? (name + "  ") : name), sexF ? "女" : "男", code, dist);
            }

            Console.ReadKey();
        }


        private static string GenName(bool sexF)
        {
            rnd = new Random((int)DateTime.Now.Ticks);

            var lastName = sexF ? _lastNameF : _lastNameM;

            string[] firstName = _firstNameS;
            // 降低复姓的生成概率
            if (DateTime.Now.Ticks % 188 == 0)
            {
                firstName = _firstNameT;
            }
            // 降低单字名的生成概率
            if (DateTime.Now.Ticks % 18 == 0)
            {
                return string.Format("{0}{1}",
                    firstName[rnd.Next(firstName.Length - 1)],
                    lastName.Substring(rnd.Next(0, lastName.Length - 1), 1));
            }
            else
            {
                return string.Format("{0}{1}{2}",
                    firstName[rnd.Next(firstName.Length - 1)],
                    lastName.Substring(rnd.Next(0, lastName.Length - 1), 1),
                    lastName.Substring(rnd.Next(0, lastName.Length - 1), 1));
            }
        }

        private static string GenPinCode()
        {
            rnd = new Random(System.DateTime.Now.Millisecond);

            //PIN = District + Year(50-92) + Month(01-12) + Date(01-30) + Seq(001-600)
            string _pinCode = string.Format("{0}19{1}{2:00}{3:00}{4:000}", _district[rnd.Next(0, _district.Length)], rnd.Next(95, 98), rnd.Next(1, 12), rnd.Next(1, 30), rnd.Next(1, 600));

            char[] _chrPinCode = _pinCode.ToCharArray();
            //校验码字符值
            char[] _chrVerify = new char[] { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
            //i----表示号码字符从由至左包括校验码在内的位置序号；
            //ai----表示第i位置上的号码字符值；
            //Wi----示第i位置上的加权因子，其数值依据公式intWeight=2（n-1）(mod 11)计算得出。
            int[] _intWeight = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
            int _Weight = 0;
            for (int i = 0; i < 17; i++)//从1 到 17 位,18为要生成的验证码
            {
                _Weight = _Weight + Convert.ToUInt16(_chrPinCode[i].ToString()) * _intWeight[i];
            }
            _Weight = _Weight % 11;
            _pinCode += _chrVerify[_Weight];

            return _pinCode;
        }

        static string[] _firstNameS = new string[] {
            "白","毕","卞","蔡","曹","岑","常","车","陈","成","程","池","邓","丁","范","方","樊","费","冯","符"
           ,"傅","甘","高","葛","龚","古","关","郭","韩","何","贺","洪","侯","胡","华","黄","霍","姬","简","江"
           ,"姜","蒋","金","康","柯","孔","赖","郎","乐","雷","黎","李","连","廉","梁","廖","林","凌","刘","柳"
           ,"龙","卢","鲁","陆","路","吕","罗","骆","马","梅","孟","莫","母","穆","倪","宁","欧","区","潘","彭"
           ,"蒲","皮","齐","戚","钱","强","秦","丘","邱","饶","任","沈","盛","施","石","时","史","苏","孙","宋"
           ,"谭","汤","唐","陶","田","童","涂","王","危","韦","卫","魏","温","文","翁","巫","邬","吴","伍","武"
           ,"席","夏","萧","谢","辛","邢","徐","许","薛","严","闫","颜","杨","叶","易","殷","尤","于","余","俞"
           ,"虞","元","袁","岳","云","曾","詹","张","章","赵","郑","钟","周","邹","朱","褚","庄","卓"
        };
        static string[] _firstNameT = new string[] {
           "司马","司徒","欧阳","上官","端木","东方","独孤","南宫","夏侯","诸葛","尉迟","皇甫","公孙","慕容"
           ,"钟离","长孙","宇文","轩辕","令狐","呼延","东郭","西门"
        };
        static string _lastNameM = "蔼安岸昂柏颁邦榜保葆豹邶备辈本弼碧昪彪飙飚宾彬斌滨秉波伯博部才参仓沧舱操曹策曾侪柴禅产昌菖琩偿倡超晁掣琛辰晨成丞呈诚承珹铖蚩弛崇崈仇畴储矗川船创春淳赐骢琮促邨达代岱丹儋道稻德荻帝殿东冬栋端段碫铎发范飞丰风封峰琒锋福甫俯辅富澉倝刚纲钢高暠根庚弓功古谷固冠光广晷炅贵桂桧国果海函涵韩寒汉汗悍颔翰瀚行航豪昊浩淏澔灏禾合和河亨恒衡蘅弘宏鸿厚候华辉会稽伋吉辑季寄暨冀骥家嘉驾稼坚骞戬建剑健键江骄鲛劼杰金锦进晋璥璟敬驹军君钧俊峻骏珺竣凯铠勘侃康科克恪铿宽劻旷况馗魁坤鲲阔莱澜朗浪乐勒磊刕黎力立吏利镰良莨梁亮列林蔺龙楼芦路仑伦轮骆吕律略马迈麦满昴茂萌孟密冕民旻敏明鸣墨木慕穆南楠宁弩欧攀旁芃朋彭鹏澎丕频乒平坪颇蒲濮朴浦奇祺启谦前乾强桥钦秦清擎庆全佺荃群然仁仞任日荣榕茹儒孺襦瑞睿叡润若飒森僧砂山杉善劭绍社伸甡燊升生苼胜晟盛诗石时实矢士示世仕势昰轼守授绶叔述树帅顺舜硕思俟笥嗣松竦宋僳旲泰弢涛腾滕藤天庭霆挺通仝同彤拓韦维伟苇玮炜卫渭魏文闻问武戊僖先贤舷宪祥翔啸瑎勰榭心欣新鑫信星兴雄修虚旭绪轩宣煊玄选学勋巡荀涯焉言岩炎彦玚遥繇业一仪颐以义谊毅银寅英鹰瀛永勇友有瑜宇雨俣昱御裕煜元塬蒝源远钺跃樾云匀运韵宰藻则泽斋展战彰钊哲喆浙臻缜稹振朕震镇征峥铮拯晸正诤政之志治峙致中忠众州宙竹主助铸壮琸卓濯子梓宗倧综昮祖尊佐祚";
        static string _lastNameF = "蔼霭艾爱嫒安荌傲奥白柏半宝北贝琲蓓碧璧冰波博布采彩灿岑钗婵昶畅唱晁朝琛辰莀宸晨丞城程痴初楚春纯淳慈聪从婃翠代戴黛丹淡迪笛娣典蝶丁冬豆端多朵婀莪娥恩儿侕尔帆凡璠方邡芳访飞妃菲霏斐芬雰丰风枫凤芙馥甘高歌格葛孤古谷莞瑰桂果海含晗涵寒菡航好浩皓禾合和河荷赫鹤恨姮衡蘅弘红闳虹花华画桦怀槐欢环幻晖辉卉会彗惠慧蕙玑姬吉季寄霁佳迦家嘉鉴江娇姣骄皎杰洁婕今金津锦谨瑾菁晶景璟婧靖静镜炯菊娟绢君筠俊隽珺恺珂柯可琨来籁兰岚阑蓝澜琅朗乐瓃蕾冷梨丽利荔俐莉怜莲良靓林琳伶灵苓岺玲铃凌菱翎令流榴柳珑芦琭路璐露罗萝洛绿玛麦曼蔓漫嫚芒眉梅美妹媚萌蒙孟梦咪米觅密谧苗淼妙玟珉闵敏名明鸣茗茉沫墨默木沐牧慕暮穆娜乃囡南楠妮霓旎念宁凝妞农侬浓暖诺女盼沛佩霈芃彭飘嫔品平萍璞齐其奇颀琪琦祺启绮千芊茜倩嫱乔巧俏芹琴勤青卿清情晴磬琼秋蕖蘧曲荃然冉苒人荏任荣容蓉溶融柔如茹濡蕤蕊芮瑞睿叡润若赛三森沙莎山杉姗珊善韶邵莘沈诗施世式书抒姝淑舒帅双霜爽水顺司丝思斯偲松素穗谭棠洮桃陶悌天田恬甜湉听渟亭婷彤桐童纨宛菀婉琬望微薇韦维苇玮未蔚文雯问梧舞夕西希惜溪熙熹曦喜霞夏仙闲贤咸娴宪羡献香湘向宵萧箫霄小晓筱笑心芯忻昕欣新歆馨星杏修秀绣琇旭绪煦轩宣萱暄玄旋璇绚雪寻荀桠雅亚娅烟嫣言妍颜俨琰彦艳晏雁燕央扬阳杨洋漾瑶野叶夜晔一伊衣依漪仪怡宜颐以佁倚义艺忆亦易怿轶奕逸意毅懿茵音吟银寅尹饮胤英莺瑛璎樱迎盈莹萦滢颖影映雍咏优攸悠友又幼余愉瑜榆宇羽雨语玉郁育钰毓豫元芫园爰媛源远苑瑗月玥悦跃越云芸运韫韵蕴赞泽湛昭哲贞珍真祯正之芝枝知芷致智仲洲朱洙珠竹庄琸卓琢姿子梓紫";

        static string[] _district = new string[] {
            "110100", "120100", "130100", "130200", "130300", "130400", "130500", "130600", "130700", "130800",
            "130900", "131000", "131100", "140100", "140200", "140300", "140400", "140500", "140600", "140700",
            "140800", "140900", "141000", "141100", "210100", "210200", "210300", "210400", "210500", "210600",
            "210700", "210800", "210900", "211000", "211100", "211200", "211300", "211400", "220100", "220200",
            "220300", "220400", "220500", "220600", "220700", "220800", "230100", "230200", "230300", "230400",
            "230500", "230600", "230700", "230800", "230900", "231000", "231100", "231200", "310100", "310200",
            "320100", "320200", "320300", "320400", "320500", "320600", "320700", "320800", "320900", "321000",
            "321100", "321200", "321300", "330100", "330200", "330300", "330400", "330500", "330600", "330700",
            "330800", "330900", "331000", "331100", "340100", "340200", "340300", "340400", "340500", "340600",
            "340700", "340800", "341000", "341100", "341200", "341300", "341400", "341500", "341600", "341700",
            "341800", "350100", "350200", "350300", "350400", "350500", "350600", "350700", "350800", "350900",
            "360100", "360200", "360300", "360400", "360500", "360600", "360700", "360800", "360900", "361000",
            "361100", "370100", "370200", "370300", "370400", "370500", "370600", "370700", "370800", "370900",
            "371000", "371100", "371200", "371300", "371400", "371500", "371600", "371700", "410100", "410200",
            "410300", "410400", "410500", "410600", "410700", "410800", "410900", "411000", "411100", "411200",
            "411300", "411400", "411500", "411600", "411700", "420100", "420200", "420300", "420400", "420500",
            "420600", "420700", "420800", "420900", "421000", "421100", "421200", "421300", "430100", "430200",
            "430300", "430400", "430500", "430600", "430700", "430800", "430900", "431000", "431100", "431200",
            "431300", "440100", "440200", "440300", "440400", "440500", "440600", "440700", "440800", "440900",
            "441200", "441300", "441400", "441500", "441600", "441700", "441800", "441900", "442000", "445100",
            "445200", "445300", "450100", "450200", "450300", "450400", "450500", "450600", "460100", "460200",
            "460300", "500100", "510100", "510200", "510300", "510400", "510500", "510600", "510700", "510800",
            "510900", "511000", "511100", "511200", "511300", "511400", "511500", "511600", "511700", "511800",
            "511900", "512000", "520100", "520200", "520300", "520400", "520500", "520600", "530100", "530200",
            "530300", "530400", "530500", "530600", "530700", "530800", "530900", "610100", "610200", "610300",
            "610400", "610500", "610600", "610700", "610800", "610900", "611000", "620100", "620200", "620300",
            "620400", "620500", "620600", "620700", "620800", "620900", "621000", "621100", "621200"
        };
        static string[] _districtName = new string[] {
            "北京市", "天津市", "河北省石家庄市", "河北省唐山市", "河北省秦皇岛市", "河北省邯郸市", "河北省邢台市",
            "河北省保定市", "河北省张家口市", "河北省承德市", "河北省沧洲市", "河北省廊坊市", "河北省衡水市",
            "山西省太原市", "山西省大同市", "山西省阳泉市", "山西省长治市", "山西省晋城市", "山西省朔州市",
            "山西省晋中市", "山西省运城市", "山西省忻州市", "山西省临汾市", "山西省吕梁市", "辽宁省沈阳市",
            "辽宁省大连市", "辽宁省鞍山市", "辽宁省抚顺市", "辽宁省本溪市", "辽宁省丹东市", "辽宁省锦州市",
            "辽宁省营口市", "辽宁省阜新市", "辽宁省辽阳市", "辽宁省盘锦市", "辽宁省铁岭市", "辽宁省朝阳市",
            "辽宁省锦西市", "吉林省长春市", "吉林省吉林市", "吉林省四平市", "吉林省辽源市", "吉林省通化市",
            "吉林省浑江市", "吉林省松原市", "吉林省白城市", "黑龙江哈尔滨市", "黑龙江齐齐哈尔市", "黑龙江鸡西市",
            "黑龙江鹤岗市", "黑龙江双鸭山市", "黑龙江大庆市", "黑龙江伊春市", "黑龙江佳木斯市", "黑龙江七台河市",
            "黑龙江牡丹江市", "黑龙江黑河市", "黑龙江省绥化市", "上海市市辖区", "上海市市辖县", "江苏省南京市",
            "江苏省无锡市", "江苏省徐州市", "江苏省常州市", "江苏省苏州市", "江苏省南通市", "江苏省连云港市",
            "江苏省淮阴市", "江苏省盐城市", "江苏省扬州市", "江苏省镇江市", "江苏省泰州市", "江苏省宿迁市",
            "浙江省杭州市", "浙江省宁波市", "浙江省温州市", "浙江省嘉兴市", "浙江省湖洲市", "浙江省绍兴市",
            "浙江省金华市", "浙江省衢州市", "浙江省舟山市", "浙江省台州市", "浙江省丽水市", "安徽省合肥市",
            "安徽省芜湖市", "安徽省蚌埠市", "安徽省淮南市", "安徽省马鞍山市", "安徽省淮北市", "安徽省铜陵市",
            "安徽省安庆市", "安徽省黄山市", "安徽省滁州市", "安徽省阜阳市", "安徽省宿州市", "安徽省巢湖市",
            "安徽省六安市", "安徽省亳州市", "安徽省池州市", "安徽省宣城市", "福建省福州市", "福建省厦门市",
            "福建省莆田市", "福建省三明市", "福建省泉州市", "福建省漳州市", "福建省南平市", "福建省龙岩市",
            "福建省宁德市", "江西省南昌市", "江西省景德镇市", "江西省萍乡市", "江西省九江市", "江西省新余市",
            "江西省鹰潭市", "江西省赣州市", "江西省吉安市", "江西省宜春市", "江西省抚州市", "江西省上饶市",
            "山东省济南市", "山东省青岛市", "山东省淄博市", "山东省枣庄市", "山东省东营市", "山东省烟台市",
            "山东省潍坊市", "山东省济宁市", "山东省泰安市", "山东省威海市", "山东省日照市", "山东省莱芜市",
            "山东省临沂市", "山东省德州市", "山东省聊城市", "山东省滨州市", "山东省荷泽市", "河南省郑州市",
            "河南省开封市", "河南省洛阳市", "河南省平顶山市", "河南省安阳市", "河南省鹤壁市", "河南省新乡市",
            "河南省焦作市", "河南省濮阳市", "河南省许昌市", "河南省漯河市", "河南省三门峡市", "河南省南阳市",
            "河南省商丘市", "河南省信阳市", "河南省周口市", "河南省驻马店市", "湖北省武汉市", "湖北省黄石市",
            "湖北省十堰市", "湖北省沙市市", "湖北省宜昌市", "湖北省襄樊市", "湖北省鄂州市", "湖北省荆门市",
            "湖北省孝感市", "湖北省荆州市", "湖北省黄冈市", "湖北省咸宁市", "湖北省随州市", "湖南省长沙市",
            "湖南省株洲市", "湖南省湘潭市", "湖南省衡阳市", "湖南省邵阳市", "湖南省岳阳市", "湖南省常德市",
            "湖南省大庸市", "湖南省益阳市", "湖南省郴州市", "湖南省永州市", "湖南省怀化市", "湖南省娄底市",
            "广东省广州市", "广东省韶关市", "广东省深圳市", "广东省珠海市", "广东省汕头市", "广东省佛山市",
            "广东省江门市", "广东省湛江市", "广东省茂名市", "广东省肇庆市", "广东省惠州市", "广东省梅州市",
            "广东省汕尾市", "广东省河源市", "广东省阳江市", "广东省清远市", "广东省东莞市", "广东省中山市",
            "广东省潮州市", "广东省揭阳市", "广东省云浮市", "广西南宁市", "广西柳州市", "广西桂林市",
            "广西梧州市", "广西北海市　", "广西防城港市", "海南省海口市", "海南省三亚市", "三沙市", "重庆市",
            "四川省成都市", "四川省重庆市", "四川省自贡市", "四川省攀枝花市", "四川省泸州市", "四川省德阳市",
            "四川省绵阳市", "四川省广元市", "四川省遂宁市", "四川省内江市", "四川省乐山市", "四川省万县市",
            "四川省南充市", "四川省眉山市", "四川省宜宾市", "四川省广安市", "四川省达州市", "四川省雅安市",
            "四川省巴中市", "四川省资阳市", "贵州省贵阳市", "贵州省六盘水市", "贵州省遵义市", "贵州省安顺市",
            "贵州省毕节市", "贵州省铜仁市", "云南省昆明市", "云南省东川市", "云南省曲靖市", "云南省玉溪市",
            "云南省保山市", "云南省昭通市", "云南省丽江市", "云南省普洱市", "云南省临沧市", "陕西省西安市",
            "陕西省铜川市", "陕西省宝鸡市", "陕西省咸阳市", "陕西省渭南市", "陕西省延安市", "陕西省汉中市",
            "陕西省榆林市", "陕西省安康市", "陕西省商洛市", "甘肃省兰州市", "甘肃省嘉峪关市", "甘肃省金昌市",
            "甘肃省白银市", "甘肃省天水市", "甘肃省武威市", "甘肃省张掖市", "甘肃省平凉市", "甘肃省酒泉市",
            "甘肃省庆阳市", "甘肃省定西市", "甘肃省陇南市"
        };

    }
}
